package com.lixiaoyu.dao;

import com.lixiaoyu.entity.ExpressBox;
import com.lixiaoyu.entity.ExpressBoxData;
import com.lixiaoyu.entity.ExpressData;

import java.util.*;

/**
 * 快递  持久层
 */
public class ExpressDataDB {

    // 取件码     快递信息
    Map<Integer,ExpressData> expressDataMap = new HashMap<>();

    public String insertExpress(ExpressBox expressBox, ExpressData expressData) {

        try{
            expressDataMap.put(expressBox.getTakeCode(),expressData);

            Set<Integer> integers = expressDataMap.keySet();
            for (Integer a:
                 integers) {
                System.out.println(a);
                System.out.println(expressDataMap.get(a).toString());
            }

            return "快递添加成功！";
        }catch (Exception e){
            return "添加失败，请联系管理员！";
        }
    }

    public List<ExpressBoxData> selectAllExpress() {

        List<ExpressBoxData> expressBoxDataList = new ArrayList<>();
        ExpressBoxData expressBoxData ;


        //得到取件码  set
        Set<Integer> integers = expressDataMap.keySet();
        for (Integer a: integers) {
            //getBoxCode 方法是静态的方法   现在已经有数据的了 如果用对象掉的话 就得重新创建对象
            //里面的数据就没有了。所以这里直接 类名直接调用静态的方法。
            if(!ExpressBoxDB.getBoxCode(a).equals("0")){
                //需要不断的创建对象  如果不创建对象的话 每次 add进入的永远都是一个内存地址
                expressBoxData = new ExpressBoxData();
                System.out.println("快递柜编码是==="+ExpressBoxDB.getBoxCode(a));
                expressBoxData.setTakeCode(a);
                expressBoxData.setBoxCode(ExpressBoxDB.getBoxCode(a));

                expressBoxData.setExpressCompany(expressDataMap.get(a).getExpressCompany());
                expressBoxData.setExpressRemarks(expressDataMap.get(a).getExpressRemarks());
                expressBoxData.setOrderCode(expressDataMap.get(a).getOrderCode());
                expressBoxData.setTakePhoneNumber(expressDataMap.get(a).getTakePhoneNumber());
                expressBoxDataList.add(expressBoxData);

            }
        }
        return expressBoxDataList;
    }

    /**
     * 根据取件码 获取到快递的信息
     * @param getExpressCode
     * @return  返回 快递数据
     */
    public List<ExpressBoxData> selectGetExpress(int getExpressCode) {
        List<ExpressBoxData>  selectAllData = new ArrayList<>();


        ExpressBoxData expressBoxData = new ExpressBoxData();
        //getBoxCode 方法是静态的方法   现在已经有数据的了 如果用对象掉的话 就得重新创建对象
        //里面的数据就没有了。所以这里直接 类名直接调用静态的方法。
        if(!ExpressBoxDB.getBoxCode(getExpressCode).equals("0")) {
            System.out.println("快递柜编码是===" + ExpressBoxDB.getBoxCode(getExpressCode));
            expressBoxData.setTakeCode(getExpressCode);
            expressBoxData.setBoxCode(ExpressBoxDB.getBoxCode(getExpressCode));

            expressBoxData.setExpressCompany(expressDataMap.get(getExpressCode).getExpressCompany());
            expressBoxData.setExpressRemarks(expressDataMap.get(getExpressCode).getExpressRemarks());
            expressBoxData.setOrderCode(expressDataMap.get(getExpressCode).getOrderCode());
            expressBoxData.setTakePhoneNumber(expressDataMap.get(getExpressCode).getTakePhoneNumber());
            selectAllData.add(expressBoxData);
        }

        return selectAllData;
    }

    /**
     *  取出快递
     *  删除快递单号对应的 快递  并且清空此快递柜
     * @param getExpressCode  取件码
     * @return  返回 删除状态
     */
    public String deleteExpress(int getExpressCode) {
        ExpressBoxDB expressBoxDB = new ExpressBoxDB();
        //清空快递  柜  a = 0 清空快递柜失败，a = 1 清空快递柜子成功
        int a = expressBoxDB.deleteExpressBox(getExpressCode);

        //删除快递信息
        ExpressData remove = expressDataMap.remove(getExpressCode);

        if(a == 0){
            return "清空快递柜失败";
        }
        return "快递取出";
    }

    public ExpressBoxData selectExpress(String code) {
        ExpressBoxData expressBoxData = null;



        //getBoxCode 方法是静态的方法   现在已经有数据的了 如果用对象掉的话 就得重新创建对象
        //里面的数据就没有了。所以这里直接 类名直接调用静态的方法。
        if(!ExpressBoxDB.getBoxCode(Integer.parseInt(code)).equals("0")){
            //需要不断的创建对象  如果不创建对象的话 每次 add进入的永远都是一个内存地址
            expressBoxData = new ExpressBoxData();
            System.out.println("快递柜编码是==="+ExpressBoxDB.getBoxCode(Integer.parseInt(code)));
            expressBoxData.setTakeCode(Integer.parseInt(code));
            expressBoxData.setBoxCode(ExpressBoxDB.getBoxCode(Integer.parseInt(code)));

            expressBoxData.setExpressCompany(expressDataMap.get(Integer.parseInt(code)).getExpressCompany());
            expressBoxData.setExpressRemarks(expressDataMap.get(Integer.parseInt(code)).getExpressRemarks());
            expressBoxData.setOrderCode(expressDataMap.get(Integer.parseInt(code)).getOrderCode());
            expressBoxData.setTakePhoneNumber(expressDataMap.get(Integer.parseInt(code)).getTakePhoneNumber());

        }
        return expressBoxData;
    }

    public String yesUpdateExpress(String expressCode, String expressRemark, String next, String getExpressPhone, String code) {
        ExpressData expressData =  new ExpressData();
        expressData.setOrderCode(expressCode);
        expressData.setExpressRemarks(expressRemark);
        expressData.setExpressCompany(Integer.parseInt(next));
        expressData.setTakePhoneNumber(getExpressPhone);
        try{
            //如果  map中有对应的key 那么就改value
            expressDataMap.replace(Integer.parseInt(code), expressData);
            return "修改成功";
        }catch (Exception e){
            return "修改失败";
        }
    }
}
